约 1634 字

约 8 分钟

#DSC 简介

Desired State Configuration(DSC)是 PowerShell 生态中的配置管理框架。它用声明的方式描述系统“应该处于什么状态”,再由执行引擎把系统调整到该状态。

#什么是 DSC

DSC 的核心是 配置(Configuration):一段描述目标状态的声明式代码。用户不必编写“先检查、再创建、失败重试”的步骤,只需要描述期望结果,例如:

  • 某个文件必须存在,且内容为指定值
  • 某个服务必须处于运行状态
  • 某个功能必须安装

DSC 会读取当前状态并与目标状态比较,只对不一致的部分进行修正。

#声明式配置

声明式配置关注 结果,而不是 过程:

Configuration WebServer {
    Node localhost {
        WindowsFeature IIS {
            Name   = 'Web-Server'
            Ensure = 'Present'
        }
    }
}

上面代码只表达“IIS 应该存在”,至于是否需要安装、跳过还是修复,由 DSC 判断。

#与命令式脚本的区别

对比项声明式(DSC)命令式脚本
描述对象期望的最终状态每一步操作
是否幂等天然幂等需要自行保证
状态检查引擎自动比较手动编写判断
适用场景服务器配置、批量部署临时任务、流程编排

命令式脚本也能实现幂等,但需要为每个操作编写 Test-Path、Get-Service 之类的判断;DSC 把这些检查内建到资源中。

#Windows PowerShell DSC 与 PowerShell 7

DSC 最早随 Windows PowerShell 4.0 提供,常称为 DSC v1:

  • 内置于 Windows PowerShell,包含 PSDesiredStateConfiguration 模块
  • 使用 Configuration 块编写,编译为 MOF 文件
  • 由本地配置管理器(LCM)应用配置
  • 资源以 PowerShell 模块形式分发

PowerShell 7 是跨平台版本,默认 不包含 完整的 DSC v1 支持。微软随后推出了独立的 DSC v3(dsc 命令行工具),支持 Windows、Linux 和 macOS,配置格式也从 MOF 转向 YAML/JSON。

#跨平台注意事项

  • DSC v1 的资源大量依赖 Windows 组件(注册表、Windows 功能、WMI),不能直接在 Linux 上运行。
  • DSC v3 使用独立的 dsc 可执行文件,通过资源清单发现资源,与 PowerShell 版本解耦。
  • 跨平台部署时,优先使用文件、脚本、包管理等通用资源,避免平台专有资源。
  • 若目标环境无法使用 DSC,可以用幂等的 PowerShell 脚本实现同样的效果。

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2